#ifndef SERIALDEBUGGINGASSISTANT_H
#define SERIALDEBUGGINGASSISTANT_H

#include <QMainWindow>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QMetaEnum>
#include <QDebug>
#include <QDateTime>
#include <QFile>
#include <QDate>
#include <QSettings>
#include <QDir>
#include <QTimer>
#include <QMessageBox>
#include <QFileDialog>
#include <QPixmap>
#include <QLabel>
#include <QPushButton>
#include <QFileDialog>
#include <QTextCharFormat>
#include <QIcon>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QListWidgetItem>
#include <QSize>

QT_BEGIN_NAMESPACE
namespace Ui { class SerialDebuggingAssistant; }
QT_END_NAMESPACE

class SerialDebuggingAssistant : public QMainWindow
{
    Q_OBJECT

public:
    SerialDebuggingAssistant(QWidget *parent = nullptr);
    ~SerialDebuggingAssistant();

    void Init();

    void InputDisplay(QString text,bool isData = false,bool isTx=false);

    void InputDisplay(QByteArray data);

    void WriteData();

    void UpdataUiTxNum();

    void UpdataUiRxNum();
private slots:
    void on_pBtn_open_clicked();

    void on_pBtn_send_clicked();

    void on_cBox_turnOverFile_clicked(bool checked);

    void on_cBox_0x0A0x0D_clicked(bool checked);

    void on_cBox_timeStamp_clicked(bool checked);

    void on_cBox_rxHex_clicked(bool checked);

    void on_cBox_stopDisplay_clicked(bool checked);

    void on_cBox_dataSrc_clicked(bool checked);

    void on_cBox_add_clicked(bool checked);

    void on_cBox_clear_clicked(bool checked);

    void on_cBox_txHex_clicked(bool checked);

    void on_cBox_cycle_clicked(bool checked);

    void on_cBox_port_activated(const QString &arg1);

    void on_cBox_baudRate_activated(const QString &arg1);

    void on_cBox_parity_activated(const QString &arg1);

    void on_cBox_dataBits_activated(const QString &arg1);

    void on_cBox_stopBits_activated(const QString &arg1);

    void on_lEdt_cycleTime_editingFinished();

    void on_actionExit_triggered();

    void on_actionAbout_triggered();

    void on_actionAboutQt_triggered();

    void on_actionOpenFile_triggered();

    void on_pBtn_save_clicked();

    void on_pBtn_loadFile_clicked();

private:
    Ui::SerialDebuggingAssistant *ui;

    QSerialPort *m_port;
    QMetaEnum m_baudRateEnum;
    QMetaEnum m_parityEnum  ;
    QMetaEnum m_dataBitsEnum;
    QMetaEnum m_stopBitsEnum;
    QSettings m_settings;
    QTimer *m_timer;
    QString m_savePath;

    QLabel *m_txNumText;
    QLabel *m_rxNumText;
    int m_txNum;
    int m_rxNum;
    QPushButton *m_resetCount;

    QString m_txDataSrcPath;

    QTableWidget *m_tableWidget;
};
#endif // SERIALDEBUGGINGASSISTANT_H
